var _aojFPS = 25;
var _aojPulseCallback = null;
var _aojPulsesCount = 0;
var _aojPulsesInLastSecond = 0;
var _aojLastMilisecond = 0;

function aojFPS(optionalNewValue) {
    if (optionalNewValue) {
        _aojFPS = optionalNewValue;
    }
    return _aojFPS;
}

function aojSetPulseCallback(callbackFunction) {
    _aojPulseCallback = callbackFunction;
}

function aojStartGameLoop() {
    if (!_aojPulseCallback) {
        alert('É preciso especificar a função a ser chamada a cada pulso, com aojSetPulseCallback. GameLoop não iniciado.');
    } else if (!_aojCanvas) {
        alert('É preciso especificar o canvas a ser usado, com aojSetCanvas. GameLoop não iniciado.');
    } else {
        _aojLastMilisecond = new Date().getTime();
        setTimeout('aojPulse()', 0);
    }
}

function aojPulse() {
    if (_aojPulseCallback) {
        _aojPulsesCount ++;
        var d = new Date();
        if (d.getTime() - _aojLastMilisecond > 1000) {
            _aojLastMilisecond = d.getTime();
            _aojPulsesInLastSecond = _aojPulsesCount;
            _aojPulsesCount = 0;
        }
        _aojPulseCallback();
        aojFillRect(6,5,50,20, 'blue');
        aojSetFont('');
        aojDrawText(_aojPulsesInLastSecond + ' fps', 10, 20, 'yellow');
        setTimeout('aojPulse()', 0);
    }
}